# encoding: utf-8
# @File  : record_log.py
# @Author: wu shaofan
# @Date  :  2024/04/17
# @Desc :  记录日志脚本
import os
import time
import colorlog
import logging
from config import BASE_DIR


# 编写日志类，供其他模块进行调用
class Log(object):

    def __init__(self, name):

        #  TODO 设置日志打印到控制台有颜色区分
        # --------------------------------------------
        log_color_config = {
            'DEBUG': 'cyan',
            'INFO': 'green',
            'WARNING': 'yellow',
            'ERROR': 'red',
            'CRITICAL': 'red',
        }
        self.color = colorlog.ColoredFormatter(
            '%(log_color)s %(asctime)s %(filename)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s', log_colors=log_color_config)

        # --------------------------------------------

        # TODO 初始化操作，获取日志文件的存放路径，若不存在则新建
        path = BASE_DIR + r"/logs_info"
        if not os.path.exists(path):
            os.mkdir(path)
            # 设置日志文件名称格式
        self.log_name = os.path.join(path, '{}.log' .format(time.strftime('%Y-%m-%d')))

        # --------------------------------------------------------------
        # TODO 设置日志文件名称格式
        self.logger = logging.getLogger(name)
        self.color_formatter = self.color
        # 防止重复打印日志
        if not self.logger.handlers:
            # 设置日志级别
            self.logger.setLevel(logging.DEBUG)
            # 设置日志输出格式
            self.formatter = logging.Formatter(
                '%(asctime)s %(filename)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s')

            # TODO 把日志输出到控制台
            # sh = logging.StreamHandler()
            # sh.setLevel(logging.DEBUG)
            # # 日志输出到控制台没有颜色区分
            # # sh.setFormatter(self.formatter)
            # # 日志输出到控制台有颜色区分
            # sh.setFormatter(self.color_formatter)
            # self.logger.addHandler(sh)

            # TODO  把日志输出到文件
            fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8', delay=False)
            fh.setLevel(logging.DEBUG)
            fh.setFormatter(self.formatter)
            self.logger.addHandler(fh)

    def get_logger(self):
        return self.logger

    # 在日志文件中添加一行空行
    def write_empty_line(self):
        with open(self.log_name, 'a') as file:
            file.write('\n')
            file.write("-------------------------------------------------")
            file.write('\n')
            file.write('\n')


if __name__ == '__main__':
    obj = Log('测试')
    logs = obj.get_logger()

    logs.info("这是info级别日志信息")
    logs.debug("这是debug级别日志信息")
    logs.warning("这是warning级别日志信息")
    logs.error("这是error级别日志信息")
    logs.critical("这是critical级别日志信息")

    # 添加一行空行
    obj.write_empty_line()
